ROW_NUMBER()是SQL用來做排序的函數,在做分頁功能時,通常都會使用上它,ROW_NUMBER()會將查詢出來的每一列資料加上一個序號(從1開始累加),依次排序且不會重複。
使用ROW_NUMBER()時必須要用OVER子句選擇對某一列進行排序才能生成序號。
使用方法:
Select ROW_NUMBER() OVER (ORDER BY [欄位名稱] (ASC or DESC) as [ROW_NUMBERㄉ欄位名稱] ,* from [資料表名稱]
使用範例:
Customers資料表
使用ROW_NUMBER()
select ROW_NUMBER() OVER (ORDER BY id ASC) as ROW_ID ,* from Customers
顯示結果
結果中的ROW_ID欄位,就是由ROW_NUMBER()函式所產生出的欄位序號列。原理是先使用OVER子句中的ORDER BY排序對資料進行排序,然後按照這個順序生成序號,由1開始一直流水編號到最後一筆資料。
範例:
select ROW_NUMBER() OVER (PARTITION BY address ORDER BY id ASC) as ROW_ID ,* from Customers
結果:
多對address下PARTITION BY條件,會發現ROW_NUMBER()產生的ROW_ID欄位,會依照組別來產生流水號。
要取出每個群組的第一筆資料,就可以使用這個方法,如下:
select * from (select ROW_NUMBER() OVER (PARTITION BY address ORDER BY id ASC) as ROW_ID ,* from Customers)as KKK where KKK.ROW_ID =1
結果: